package com.Algorithm.Study.ThinkTest;


/*
*
* 题目:插入排序
* 目标:有序
* 解:保证0-0 0-1 0-2 0-3 0-4 0-5 0-n 都是有序的
* 思考插入排序,怎么就是个插入,,能直接定位插入吗?  不能---它的插入是依据前后的大小,然后再进行判断是否两两交换
*
*
*
* */
public class InsertSortTest {
    // 先来个保证0-1有序

    public static void main(String[] args) {
        int arr[] = new int[]{2,1,5,62,132,1,3,5,8,4,3,1,45};
        int len = arr.length;

        for (int i = 1; i < len; i++) {             // 内层for中&&,相当于下面加了个if(arr[j]<arr[j-1]){}
                for (int j = i; j > 0 && (arr[j]<arr[j-1]); j--) {    // 从i开始  也就是一个个0-1 0-2 0-3 0-..
                                                                    // &&后面的识别本次是否要交换  即(1,2,3,1)
                        swap(arr,j,j-1);                // 比如最后两个,肯定要换,然后再换---还是类似于冒泡的两两交换
                }

        }


        for (int i : arr) {
            System.out.print(i+" ");
        }
    }



    public static void swap(int arr[],int x,int y){
        arr[x] = arr[x]^arr[y];
        arr[y] = arr[x]^arr[y];
        arr[x] = arr[x]^arr[y];
    }



}
